//package com.dominator.utils.pay;
//
//import java.io.UnsupportedEncodingException;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.SortedMap;
//import java.util.TreeMap;
//
//import org.dom4j.Element;
//
//import Constants;
//import Des3Utils;
//import PropertiesLoader;
//import SeemseUtil;
//import ApiException;
//
//import net.sf.json.JSONObject;
//
//public class Unifiedorder {
//	public static PropertiesLoader propertiesLoader = new PropertiesLoader("sysconfig.properties");
//
//	/**
//	 * 支付宝支付订单生成
//	 *
//	 * @param total_amount(支付金额【元】)
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> ALI_unifiedorder(double total_amount, String name) {
//		/** 设置进行签名参数 **/
//		Map<String, String> signMap = new HashMap<String, String>();
//		// 支付宝分配给开发者的应用ID
//		signMap.put("app_id", Constants.AL_app_id);
//		// 接口名称
//		signMap.put("method", "alipay.trade.app.pay");
//		// 请求使用的编码格式
//		signMap.put("charset", "utf-8");
//		// 商户生成签名字符串所使用的签名算法类型
//		signMap.put("sign_type", "RSA");
//		// 发送请求的时间
//		signMap.put("timestamp", SeemseUtil.getCurrentTimeyyyyMMddHHmmss());
//		// 调用的接口版本，固定为：1.0
//		signMap.put("version", "1.0");
//		// 付宝服务器主动通知商户服务器里指定的页面http/https路径。
//		signMap.put("notify_url", propertiesLoader.getProperty("notify.url.al"));
//
//		/** 设置biz_content参数 START **/
//		Map<String, String> bizContentMap = new HashMap<String, String>();
//		// 商户网站唯一订单号
//		bizContentMap.put("out_trade_no", SeemseUtil.getCurrentTime());
//		// 销售产品码，商家和支付宝签约的产品码,固定值QUICK_MSECURITY_PAY
//		bizContentMap.put("product_code", "QUICK_MSECURITY_PAY");
//		// 商品的标题/交易标题/订单标题/订单关键字等
//		bizContentMap.put("subject", name);
//		// 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000]
//		bizContentMap.put("total_amount", total_amount + "");
//		JSONObject jsonObject = JSONObject.fromObject(bizContentMap);
//		/** 设置biz_content参数 END **/
//		// 业务请求参数的集合
//		signMap.put("biz_content", jsonObject.toString());
//
//		/** 调用签名方法 **/
//		String sign = OrderInfoUtil.getSign(signMap, Constants.AL_APP_PRIVATE_KEY_RSA);
//
//		signMap.put("out_trade_no", bizContentMap.get("out_trade_no"));
//		signMap.put("sign", sign);
//
//		return signMap;
//	}
//
//	/**
//	 * 支付宝订单查询
//	 *
//	 * @param
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static String ALI_check_sign(String out_trade_no, String trade_no) {
//		/** 设置进行签名参数 **/
//		Map<String, String> signMap = new HashMap<String, String>();
//		// 支付宝分配给开发者的应用ID
//		signMap.put("app_id", Constants.AL_app_id);
//		// 接口名称
//		signMap.put("method", "alipay.trade.query");
//		// 请求使用的编码格式
//		signMap.put("charset", "utf-8");
//		// 商户生成签名字符串所使用的签名算法类型
//		signMap.put("sign_type", "RSA");
//		// 发送请求的时间
//		signMap.put("timestamp", SeemseUtil.getCurrentTimeyyyyMMddHHmmss());
//		// 调用的接口版本，固定为：1.0
//		signMap.put("version", "1.0");
//
//		/** 设置biz_content参数 START **/
//		Map<String, String> bizContentMap = new HashMap<String, String>();
//		// 商户网站唯一订单号
//		bizContentMap.put("out_trade_no", out_trade_no);
//		// 支付宝订单号
//		// bizContentMap.put("trade_no",trade_no);
//		JSONObject jsonObject = JSONObject.fromObject(bizContentMap);
//		/** 设置biz_content参数 END **/
//		// 业务请求参数的集合
//		signMap.put("biz_content", jsonObject.toString());
//
//		/** 调用签名方法 **/
//		String sign = OrderInfoUtil.getSign(signMap, Constants.AL_APP_PRIVATE_KEY_RSA);
//		System.out.println(sign);
//		// signMap.put("out_trade_no", bizContentMap.get("out_trade_no"));
//		signMap.put("sign", sign);
//		String returnString = null;
//		try {
//			returnString = HttpKit.al_get_order(signMap, "https://openapi.alipay.com/gateway.do");
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		System.out.println(returnString);
//		return returnString;
//	}
//
//	/**
//	 * 微信签名
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_Sign(double total_fee, String spbill_create_ip, String name) {
//		SortedMap<String, Object> signMap = new TreeMap<String, Object>();
//		// 微信开放平台审核通过的应用APPID
//		signMap.put("appid", propertiesLoader.getProperty("wx_public_appid"));
//		// 微信商户号
//		signMap.put("mch_id", propertiesLoader.getProperty("wx_public_MchId"));
//		// 随机字符串
//		signMap.put("nonce_str", SeemseUtil.randoms());
//		// 商品描述
//		signMap.put("body", name);
//		// 商户订单号
//		signMap.put("out_trade_no", SeemseUtil.getCurrentTime() + "W");
//		// 总金额
//		signMap.put("total_fee", (int) (total_fee * 100));
//		// 用户端实际ip
//		signMap.put("spbill_create_ip", spbill_create_ip);
//		// 异步通知地址
//		signMap.put("notify_url", propertiesLoader.getProperty("notify.url.wx"));
//		// 交易类型
//		signMap.put("trade_type", "APP");
//		/** 调用签名方法 **/
//		String sign = WxPaySign.createSign(signMap, null);
//		signMap.put("sign", sign);
//		return WX_unifiedorder(signMap);
//
//	}
//
//	/**
//	 * 微信预支付订单
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_unifiedorder(SortedMap<String, Object> signMap) {
//
//		// 生成订单号
//		Map<String, String> map = new HashMap<String, String>();
//		map.put("appid", propertiesLoader.getProperty("wx_public_appid"));// 应用ID
//		map.put("body", signMap.get("body") + "");// 商品描述
//		map.put("mch_id", propertiesLoader.getProperty("wx_public_MchId"));// 商户号
//		map.put("nonce_str", signMap.get("nonce_str") + "");// 随机字符串
//		map.put("notify_url", Constants.WX_notify_url);// 通知地址
//		map.put("out_trade_no", signMap.get("out_trade_no") + "");// 商户订单号
//		map.put("spbill_create_ip", signMap.get("spbill_create_ip") + "");// 终端IP
//		map.put("total_fee", signMap.get("total_fee") + "");// 总金额
//		map.put("trade_type", "APP");// 交易类型
//		map.put("sign", signMap.get("sign") + "");
//		// 进行xml格式拼接
//		String xml = SeemseUtil.createXml(map);
//		System.out.println(xml);
//		// 接收接口返回值
//		String returnXml = HttpKit.post(Constants.WX_PrepayUrl, xml);
//		System.out.println("获取订单成功");
//		System.out.println(returnXml);
//		// 解析xml格式数据
//		Element root = XmlParser.doParse(returnXml);
//		System.out.println(root.toString());
//		// 获取返回状态
//		String returnCode = root.elementTextTrim("return_code");
//		String resultCode = root.elementText("result_code");
//		String prepay_id = "";
//		String code = "ERROR";
//		System.out.println(returnCode + "------" + resultCode);
//		if (returnCode.equals("SUCCESS") && resultCode.equals("SUCCESS")) {
//			System.err.println("二次签名");
//			code = "SUCCESS";
//			prepay_id = root.elementTextTrim("prepay_id");
//			SortedMap<String, Object> resCodeMap = new TreeMap<String, Object>();
//			long currentTimeMillis = System.currentTimeMillis();// 生成时间戳
//			System.err.println(currentTimeMillis);
//			long second = currentTimeMillis / 1000L;// （转换成秒）
//			System.err.println("-----------------------------------------------------");
//			String seconds = String.valueOf(second).substring(0, 10);// （截取前10位）
//			System.err.println(seconds);
//			resCodeMap.put("appid", propertiesLoader.getProperty("wx_public_appid"));
//			resCodeMap.put("partnerid", propertiesLoader.getProperty("wx_public_MchId"));
//			resCodeMap.put("prepayid", prepay_id);
//			resCodeMap.put("noncestr", signMap.get("nonce_str"));
//			resCodeMap.put("package", "Sign=WXPay");
//			resCodeMap.put("timestamp", seconds);
//			String sign = WxPaySign.createSign(resCodeMap, null);
//			Map<String, String> resMap = new HashMap<String, String>();
//			resMap.put("appid", propertiesLoader.getProperty("wx_public_appid"));
//			resMap.put("partnerId", propertiesLoader.getProperty("wx_public_MchId"));
//			resMap.put("prepayId", prepay_id);
//			resMap.put("nonceStr", signMap.get("nonce_str") + "");
//			resMap.put("package", "Sign=WXPay");
//			resMap.put("timestamp", seconds + "");
//			resMap.put("sign", sign);
//			resMap.put("out_trade_no", signMap.get("out_trade_no") + "");
//			return resMap;
//		}
//		return null;
//
//	}
//
//	/**
//	 * 微信签名
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_Sign_new(double total_fee, String spbill_create_ip, String name,
//			String trade_type) throws ApiException {
//		SortedMap<String, Object> signMap = new TreeMap<String, Object>();
//		// 微信开放平台审核通过的应用APPID
//		signMap.put("appid", propertiesLoader.getProperty("wx_public_appid"));
//		// 微信商户号
//		signMap.put("mch_id", propertiesLoader.getProperty("wx_public_MchId"));
//		// 随机字符串
//		signMap.put("nonce_str", SeemseUtil.randoms());
//		// 商品描述
//		signMap.put("body", name);
//		// 商户订单号
//		signMap.put("out_trade_no", SeemseUtil.getCurrentTime() + "W");
//		// 总金额
//		signMap.put("total_fee", (int) (total_fee * 100));
//		// 用户端实际ip
//		signMap.put("spbill_create_ip", spbill_create_ip);
//		// 异步通知地址
//		signMap.put("notify_url", propertiesLoader.getProperty("notify.url.wx.h5"));
//		// 交易类型
//		signMap.put("trade_type", trade_type);
//		/** 调用签名方法 **/
//		String sign = WxPaySign.createSign(signMap, null);
//		signMap.put("sign", sign);
//		return WX_unifiedorder_new(signMap, trade_type);
//
//	}
//
//	/**
//	 * 微信预支付订单
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_unifiedorder_new(SortedMap<String, Object> signMap, String trade_type)
//			throws ApiException {
//
//		// 生成订单号
//		Map<String, String> map = new HashMap<String, String>();
//		map.put("appid", signMap.get("appid").toString());// 应用ID
//		map.put("body", signMap.get("body") + "");// 商品描述
//		map.put("mch_id", signMap.get("mch_id").toString());// 商户号
//		map.put("nonce_str", signMap.get("nonce_str") + "");// 随机字符串
//		map.put("notify_url", signMap.get("notify_url") + "");// 通知地址
//		map.put("out_trade_no", signMap.get("out_trade_no") + "");// 商户订单号
//		map.put("spbill_create_ip", signMap.get("spbill_create_ip") + "");// 终端IP
//		map.put("total_fee", signMap.get("total_fee") + "");// 总金额
//		map.put("trade_type", signMap.get("trade_type") + "");// 交易类型
//		map.put("sign", signMap.get("sign") + "");
//		// 用户唯一标识符
//		// 进行xml格式拼接
//		String xml = SeemseUtil.createXml2(map);
//		System.out.println(xml);
//		// 接收接口返回值
//		String returnXml = HttpKit.post(Constants.WX_PrepayUrl, xml);
//		System.out.println("获取订单成功");
//		System.out.println(returnXml);
//		// 解析xml格式数据
//		Element root = XmlParser.doParse(returnXml);
//		System.out.println(root.toString());
//		// 获取返回状态
//		String returnCode = root.elementTextTrim("return_code");
//		String resultCode = root.elementText("result_code");
//		String prepay_id = "";
//		String code = "ERROR";
//		System.out.println(returnCode + "------" + resultCode);
//		if (returnCode.equals("SUCCESS") && resultCode.equals("SUCCESS")) {
//			System.err.println("结果验证");
//			Map<String, String> resMap = new HashMap<String, String>();
//			resMap.put("code_url", root.elementText("code_url"));
//			resMap.put("prepay_id", root.elementTextTrim("prepay_id"));
//			resMap.put("out_trade_no", signMap.get("out_trade_no") + "");
//
//			return resMap;
//		}
//		throw new ApiException(Constants.REQ_ORDER_ERROR, "获取订单失败");
//	}
//
//	/**
//	 * 微信预支付订单
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_unifiedorder_public(SortedMap<String, Object> signMap, String trade_type,
//			String openid) throws ApiException {
//
//		// 生成订单号
//		Map<String, String> map = new HashMap<String, String>();
//		map.put("appid", signMap.get("appid").toString());// 应用ID
//		map.put("body", signMap.get("body") + "");// 商品描述
//		map.put("mch_id", signMap.get("mch_id").toString());// 商户号
//		map.put("nonce_str", signMap.get("nonce_str") + "");// 随机字符串
//		map.put("notify_url", signMap.get("notify_url") + "");// 通知地址
//		map.put("openid", openid);
//		map.put("out_trade_no", signMap.get("out_trade_no") + "");// 商户订单号
//		map.put("sign_type", "MD5");
//		map.put("spbill_create_ip", signMap.get("spbill_create_ip") + "");// 终端IP
//		map.put("total_fee", signMap.get("total_fee") + "");// 总金额
//		map.put("trade_type", signMap.get("trade_type") + "");// 交易类型
//		map.put("sign", signMap.get("sign") + "");
//		// 用户唯一标识符
//		// 进行xml格式拼接
//		String xml = SeemseUtil.createXml(map);
//		System.out.println(xml);
//		// 接收接口返回值
//		String returnXml = HttpKit.post(Constants.WX_PrepayUrl, xml);
//		System.out.println("获取订单成功");
//		System.out.println(returnXml);
//		// 解析xml格式数据
//		Element root = XmlParser.doParse(returnXml);
//		System.out.println(root.toString());
//		// 获取返回状态
//		String returnCode = root.elementTextTrim("return_code");
//		String resultCode = root.elementText("result_code");
//		String prepay_id = "";
//		String code = "ERROR";
//		System.out.println(returnCode + "------" + resultCode);
//		if (returnCode.equals("SUCCESS") && resultCode.equals("SUCCESS")) {
//			System.err.println("结果验证");
//			long currentTimeMillis = System.currentTimeMillis();// 生成时间戳
//			System.err.println(currentTimeMillis);
//			long second = currentTimeMillis / 1000L;// （转换成秒）
//			Map<String, String> resMap = new HashMap<String, String>();
//			resMap.put("nonce_str", map.get("nonce_str"));
//			resMap.put("prepay_id", "prepay_id=" + root.elementText("prepay_id"));
//			resMap.put("out_trade_no", signMap.get("out_trade_no") + "");
//			resMap.put("appId", map.get("appid") + "");
//			resMap.put("timeStamp", second + "");
//			resMap.put("signType", "MD5");
//			// 二次签名（微信公众号支付传参paySign需要nonceStr、package、appId、timeStamp、signType参与签名）
//			SortedMap<String, Object> signMaps = new TreeMap<String, Object>();
//			signMaps.put("nonceStr", map.get("nonce_str"));
//			signMaps.put("package", "prepay_id=" + root.elementText("prepay_id"));
//			signMaps.put("appId", map.get("appid") + "");
//			signMaps.put("timeStamp", second + "");
//			signMaps.put("signType", "MD5");
//			String sign = WxPaySign.createSign(signMaps, propertiesLoader.getProperty("wx_public_key"));
//			resMap.put("sign", sign);
//			System.err.println("22222" + Des3Utils.encResponse(resMap));
//			return resMap;
//		}
//		throw new ApiException(Constants.REQ_ORDER_ERROR, "获取订单失败");
//	}
//
//	/**
//	 * 微信签名(公众号)
//	 *
//	 * @param total_fee(支付金额【元】)；
//	 * @param spbill_create_ip（用户端实际ip）
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> WX_Sign_public(double total_fee, String spbill_create_ip, String name,
//			String trade_type, String openid) throws ApiException {
//		SortedMap<String, Object> signMap = new TreeMap<String, Object>();
//		// 微信开放平台审核通过的应用APPID
//		signMap.put("appid", propertiesLoader.getProperty("wx_public_appid"));
//		// 微信商户号
//		signMap.put("mch_id", propertiesLoader.getProperty("wx_public_MchId"));
//		// 随机字符串
//		signMap.put("nonce_str", SeemseUtil.randoms().toUpperCase());
//		// 商品描述
//		signMap.put("body", name);
//		// 用户唯一标识符
//		signMap.put("openid", openid);
//		// 商户订单号
//		signMap.put("out_trade_no", SeemseUtil.getCurrentTime() + "W");
//		// 总金额
//		signMap.put("total_fee", (int) (total_fee * 100));
//		signMap.put("sign_type", "MD5");
//		// 用户端实际ip
//		signMap.put("spbill_create_ip", spbill_create_ip);
//		// 异步通知地址
//		signMap.put("notify_url", propertiesLoader.getProperty("notify.url.wx.h5"));
//		// 交易类型
//		signMap.put("trade_type", trade_type);
//		/** 调用签名方法 **/
//		String sign = WxPaySign.createSign(signMap, propertiesLoader.getProperty("wx_public_key"));
//		signMap.put("sign", sign);
//		return WX_unifiedorder_public(signMap, trade_type, openid);
//
//	}
//
//	/**
//	 * 支付宝支付订单生成
//	 *
//	 * @param total_amount(支付金额【元】)
//	 * @return ApiMessage
//	 * @throws ApiException
//	 */
//	public static Map<String, String> ALI_unifiedorder_new(double total_amount, String name) {
//		/** 设置进行签名参数 **/
//		Map<String, String> signMap = new HashMap<String, String>();
//		// 支付宝分配给开发者的应用ID
//		signMap.put("app_id", Constants.AL_app_id);
//		// 接口名称
//		signMap.put("method", "alipay.trade.wap.pay");
//		// 请求使用的编码格式
//		signMap.put("charset", "utf-8");
//		// //HTTP/HTTPS开头字符串(成功返回页面)
//		// signMap.put("return_url","https://www.baidu.com?userPhone=15157526460");
//		// 商户生成签名字符串所使用的签名算法类型
//		signMap.put("sign_type", "RSA");
//		// 发送请求的时间
//		signMap.put("timestamp", SeemseUtil.getCurrentTimeyyyyMMddHHmmss());
//		// 调用的接口版本，固定为：1.0
//		signMap.put("version", "1.0");
//		// 付宝服务器主动通知商户服务器里指定的页面http/https路径。
//		signMap.put("notify_url", propertiesLoader.getProperty("notify.url.al.h5"));
//
//		/** 设置biz_content参数 START **/
//		Map<String, String> bizContentMap = new HashMap<String, String>();
//		// 商户网站唯一订单号
//		bizContentMap.put("out_trade_no", SeemseUtil.getCurrentTime());
//		// 销售产品码，商家和支付宝签约的产品码,固定值QUICK_MSECURITY_PAY
//		bizContentMap.put("product_code", "QUICK_WAP_PAY");
//		// 商品的标题/交易标题/订单标题/订单关键字等
//		try {
//			name = new String(name.getBytes("ISO-8859-1"), "utf-8");
//		} catch (UnsupportedEncodingException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		bizContentMap.put("subject", name);
//		// 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000]
//		bizContentMap.put("total_amount", total_amount + "");
//		JSONObject jsonObject = JSONObject.fromObject(bizContentMap);
//		/** 设置biz_content参数 END **/
//		// 业务请求参数的集合
//		signMap.put("biz_content", jsonObject.toString());
//
//		/** 调用签名方法 **/
//		String sign = OrderInfoUtil.getSign(signMap, Constants.AL_APP_PRIVATE_KEY_RSA);
//
//		signMap.put("sign", sign);
//		signMap.put("out_trade_no", bizContentMap.get("out_trade_no"));
//		return signMap;
//	}
//}
